The present invention relates generally to the verification of integrated circuit (IC) logic, and more particularly to a method and system for increasing the efficiency and re-usability of verification software.
Before ICs are released to market, the logic designs incorporated therein are typically subject to a testing and de-bugging process known as “verification.” Verification of logic designs using simulation software allows a significant number of design flaws to be detected and corrected before incurring the time and expense needed to physically fabricate designs.
Software verification typically entails the use of software “models” of design logic. Such models may be implemented as a set of instructions in a hardware description language (HDL) such as Verilog® or VHDL®. The models execute in a simulation environment and can be programmed to simulate a corresponding hardware implementation. The simulation environment comprises specialized software for interpreting model code and simulating the corresponding hardware device or devices. By applying test stimuli (typically in batches known as “test cases”) to a model in simulation, observing the responses of the model and comparing them to expected results, design flaws can be detected and corrected.
Advances in technology have permitted logic designs to be packed with increased density into smaller areas of silicon as compared with past IC devices. This has led to “system-on-a-chip” (SOC) designs. The term “SOC” as used herein refers to combinations of discrete logic blocks, often referred to as “cores,” each performing a different function or group of functions. A SOC integrates a plurality of cores into a single silicon device, thereby providing a wide range of functions in a highly compact form. Typically, a SOC comprises its own processor core (often referred to as an “embedded” processor), and will further comprise one or more cores for performing a range of functions often analogous to those of devices in larger-scale systems.
In its developmental stages a core is typically embodied as a simulatable HDL model written at some level of abstraction, or in a mixture of abstraction levels. Levels of abstraction that are generally recognized include a behavioral level, a structural level, and a logic gate level. A core may be in the form of a netlist including behavioral, structural and logic gate elements.
Verification of a SOC presents challenges because of the number of cores and the complexity of interactions involved, both between the cores internally to the SOC, and between the SOC and external logic. An acceptable level of verification demands that a great number of test cases be applied, both to individual components of the SOC, and to the cores interconnected as a system and interfacing with logic external to the SOC. There is a commensurate demand on computer resources and time. Accordingly, techniques which increase the efficiency of verification are at a premium.
According to one standard technique, already-verified models are used to test other models. The electronic design automation (EDA) industry has reached a level of sophistication wherein vendors offer standardized models for use in verification of other models still in development. In particular, such models are typically used for testing cores in a SOC that have external interfaces (i.e., communicate with logic external to the SOC). Such standardized models save the purchaser development resources, are typically well-tested and reliable, and are designed to have a wide range of applicability.
However, there are disadvantages associated with using standardized models. For instance, they can be very costly. Moreover, they can be very complex and provide much more functionality than is needed by the purchaser if only a subset of functions are required. Further, the standardized models must be integrated into existing verification systems, incurring more cost in terms of time and effort.
Alternatively to purchasing and using standardized models, designers may, of course, develop their own testing models. However, this is costly in terms of development time, with the typical result that such models are designed for limited application. Accordingly, they typically have limited functionality and re-usability.
An approach is needed to address the concerns noted in the foregoing.